package cn.chuengxu._05_transactionListener;

import org.apache.rocketmq.client.producer.LocalTransactionState;
import org.apache.rocketmq.client.producer.TransactionListener;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;

/**======================================================================================
* @Title:
* @Description: 事务发送消息所需要的监听器类
* @Author: Mr.Zhang
* @Version: 1.0
* @Date:  2022/7/25 18:54
* @Parameters:
* @Return
======================================================================================*/
public class MyTranListener implements TransactionListener {

    /**======================================================================================
    * @Title: executeLocalTransaction
    * @Description: 消息发送成功所返回的信息
    * @Author: Mr.Zhang
    * @Version: 1.0
    * @Date:  2022/7/25 18:55
    * @Parameters: [message, o]
    * @Return org.apache.rocketmq.client.producer.LocalTransactionState
    ======================================================================================*/
    @Override
    public LocalTransactionState executeLocalTransaction(Message message, Object o) {
        System.out.println("消息发送成功了,返回MQ发送成功的消息,成功:COMMIT,失败:ROLLBACK");
        return LocalTransactionState.COMMIT_MESSAGE;
    }



    /**======================================================================================
    * @Title: checkLocalTransaction
    * @Description: MQ一只没有接到发送消息的结果,会调用这个方法来进行查询最后的结果是成功还是失败,
    * @Author: Mr.Zhang
    * @Version: 1.0
    * @Date:  2022/7/25 18:56
    * @Parameters: [messageExt]
    * @Return org.apache.rocketmq.client.producer.LocalTransactionState
    ======================================================================================*/
    @Override
    public LocalTransactionState checkLocalTransaction(MessageExt messageExt) {
        System.out.println("MQ调用方法成功,查询本地事务成功");

        return LocalTransactionState.COMMIT_MESSAGE;
    }
}
